home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / share / pyshared / DistUpgrade / DistUpgradeGettext.py < prev    next >
Text File  |  2009-11-02  |  2KB  |  60 lines

  1. # DistUpgradeGettext.py - safe wrapper around gettext
  2. #  
  3. #  Copyright (c) 2008 Canonical
  4. #  
  5. #  Author: Michael Vogt <michael.vogt@ubuntu.com>
  6. #  This program is free software; you can redistribute it and/or 
  7. #  modify it under the terms of the GNU General Public License as 
  8. #  published by the Free Software Foundation; either version 2 of the
  9. #  License, or (at your option) any later version.
  10. #  This program is distributed in the hope that it will be useful,
  11. #  but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13. #  GNU General Public License for more details.
  14. #  You should have received a copy of the GNU General Public License
  15. #  along with this program; if not, write to the Free Software
  16. #  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  17. #  USA
  18.  
  19. import logging
  20. import gettext as mygettext
  21.  
  22. def _verify(message, translated):
  23.     """ 
  24.     helper that verifies that the message and the translated 
  25.     message have the same number (and type) of % args
  26.     """
  27.     arguments_in_message = message.count("%") - message.count("\%")
  28.     arguments_in_translation = translated.count("%") - translated.count("\%")
  29.     return arguments_in_message == arguments_in_translation
  30.  
  31. def gettext(message):
  32.     """
  33.     version of gettext that logs errors but does not crash on incorrect
  34.     number of arguments
  35.     """
  36.     if message == "":
  37.         return ""
  38.     translated_msg = mygettext.gettext(message)
  39.     if not _verify(message, translated_msg):
  40.         logging.error("incorrect translation for message '%s' to '%s' (wrong number of arguments)" % (message, translated_msg))
  41.         return message
  42.     return translated_msg
  43.  
  44. def ngettext(msgid1, msgid2, n):
  45.     """
  46.     version of ngettext that logs errors but does not crash on incorrect
  47.     number of arguments
  48.     """
  49.     translated_msg = mygettext.ngettext(msgid1, msgid2, n)
  50.     if not _verify(msgid1, translated_msg):
  51.         logging.error("incorrect translation for ngettext message '%s' plural: '%s' to '%s' (wrong number of arguments)" % (msgid1, msgid2, translated_msg))
  52.         # dumb fallback to not crash
  53.         if n == 1:
  54.             return msgid1
  55.         return msgid2
  56.     return translated_msg
  57.